home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 11 / Cream of the Crop 11-2.iso / os2 / os2cl015.zip / pmdlg.h < prev    next >
C/C++ Source or Header  |  1995-11-24  |  11KB  |  347 lines

  1. /* 
  2.  
  3.  
  4.     pmdlg.h (emx+gcc) 
  5.  
  6.     1994,95 Giovanni Iachello
  7.     This is freeware software. You can use or modify it as you wish,
  8.     provided that the part of code that I wrote remains freeware.
  9.     Freeware means that the source code must be available on request 
  10.     to anyone.
  11.     You must also include this notice in all files derived from this
  12.     file.
  13.  
  14.  
  15. */
  16. #ifndef _PMDLG_H_
  17. #define _PMDLG_H_
  18.  
  19. class PMControl;
  20.  
  21. typedef PMControl* pPMControl;
  22. typedef pPMControl (*NEWCTRLFN) (HWND,void*,int,int);
  23.  
  24. class PMControl : public PMWin {
  25. protected:
  26.     void* obj;
  27.     int len;        
  28.     int id;
  29.     // qui il hwndFrame e' l'hwnd della Dlg...
  30. public:
  31.     PMControl(HWND parentdlg,void* iobj,int ilen,int iid);
  32.     BOOL destroyWin();
  33.     virtual void get()=0;
  34.     virtual void set()=0;
  35.     MRESULT sendMsg(ULONG msg, MPARAM mp1=0L, MPARAM mp2=0L) 
  36.         { return WinSendDlgItemMsg(hwndFrame,id,msg,mp1,mp2); }
  37.  
  38.     BOOL queryShort(PSHORT pResult, BOOL fSigned) {
  39.         return WinQueryDlgItemShort(hwndFrame, id, pResult, fSigned);
  40.     }
  41.     ULONG queryText(LONG cchBufferMax,PSZ pchBuffer) {
  42.         return WinQueryDlgItemText (hwndFrame, id, cchBufferMax, pchBuffer);
  43.     }
  44.     LONG queryTextLenght() {
  45.         return WinQueryDlgItemTextLength (hwndFrame, id);
  46.     }
  47.     BOOL setShort( USHORT usValue, BOOL fSigned) {
  48.         return WinSetDlgItemShort (hwndFrame, id, usValue, fSigned);
  49.     }
  50.     BOOL setText (PCSZ pszText) {
  51.         return WinSetDlgItemText (hwndFrame, id, pszText);
  52.     }
  53. };
  54.  
  55. /////////////////////////////////////////////////////////////////////////////
  56.  
  57. class PMButton : public PMControl {
  58. protected:
  59. public:
  60.     PMButton(HWND parentDlg,void* iobj,int ilen,int iid);
  61.     static PMControl* New(HWND parent,void* obj, int len, int id) 
  62.         { return new PMButton(parent,obj,len,id); }
  63.     BOOL queryHilite() { return (BOOL)sendMsg(BM_QUERYHILITE); }
  64.     BOOL setHilite(USHORT usHilite) { return (BOOL)sendMsg(BM_SETHILITE,(MPARAM)usHilite); }
  65.     ULONG click(USHORT usUp) { return (ULONG)sendMsg(BM_CLICK,(MPARAM)usUp); }
  66.     USHORT queryCheck() { return (USHORT)sendMsg(BM_QUERYCHECK); }
  67.     USHORT setCheck(USHORT usCheck) { return (USHORT)sendMsg(BM_SETCHECK,(MPARAM)usCheck); }
  68.     void get();
  69.     void set();
  70. };
  71.  
  72. class PMRadioButtonGroup : public PMButton {
  73. protected:
  74. public:
  75.     PMRadioButtonGroup(HWND parentDlg,void* iobj,int ilen,int iid);
  76.     static PMControl* New(HWND parent,void* obj, int len, int id) 
  77.         { return new PMRadioButtonGroup(parent,obj,len,id); }
  78.     SHORT queryIndex() { return (SHORT)sendMsg(BM_QUERYCHECKINDEX); }
  79.     void get();
  80.     void set();
  81. };
  82.  
  83. class PMCheckBox : public PMButton {
  84. protected:
  85. public:
  86.     PMCheckBox(HWND parentDlg,void* iobj,int ilen,int iid);
  87.     static PMControl* New(HWND parent,void* obj, int len, int id) 
  88.         { return new PMCheckBox(parent,obj,len,id); }
  89.     void get();
  90.     void set();
  91. };
  92.  
  93. /////////////////////////////////////////////////////////////////////////////
  94.  
  95. class PMEntryField : public PMControl {
  96. protected:
  97. public:
  98.     PMEntryField(HWND parentDlg,void* iobj,int ilen,int iid);
  99.     static PMControl* New(HWND parent,void* obj, int len, int id) 
  100.         { return new PMEntryField(parent,obj,len,id); }
  101.     void get();
  102.     void set();
  103. };
  104.  
  105. class PMMultiLineEdit : public PMControl {
  106. protected:
  107. public:
  108.     PMMultiLineEdit(HWND parentDlg,void* iobj,int ilen,int iid);
  109.     static PMControl* New(HWND parent,void* obj, int len, int id) 
  110.         { return new PMMultiLineEdit(parent,obj,len,id); }
  111.     void get();
  112.     void set();
  113. };
  114.  
  115. /////////////////////////////////////////////////////////////////////////////
  116.  
  117. class PMValueSet : public PMControl {
  118. protected:
  119. public:
  120.     PMValueSet(HWND parentDlg,void* iobj,int ilen,int iid);
  121.     static PMControl* New(HWND parent,void* obj, int len, int id) 
  122.         { return new PMValueSet(parent,obj,len,id); }
  123.     MRESULT querySelectedItem() { sendMsg(VM_QUERYSELECTEDITEM); }
  124.     MRESULT queryItem() { sendMsg(VM_QUERYITEM); }
  125.     MRESULT selectItem(USHORT usX,USHORT usY) { sendMsg(VM_SELECTITEM,MPFROM2SHORT( usX, usY)); }
  126.     MRESULT selectItem(MPARAM item) { sendMsg(VM_SELECTITEM,item); }
  127.     MRESULT setItem(USHORT usX,USHORT usY,MPARAM data) { 
  128.         sendMsg(VM_SETITEM,MPFROM2SHORT( usX, usY),data); }
  129.     void get();
  130.     void set();
  131. };
  132.  
  133. /////////////////////////////////////////////////////////////////////////////
  134.  
  135. class PMSpinButton : public PMControl {
  136. protected:
  137. public:
  138.     PMSpinButton(HWND parentDlg,void* iobj,int ilen,int iid);
  139.     static PMControl* New(HWND parent,void* obj, int len, int id) 
  140.         { return new PMSpinButton(parent,obj,len,id); }
  141.  
  142.     BOOL queryLimits(ULONG ulUpLimit,ULONG ulLoLimit) {
  143.         return (BOOL) sendMsg(SPBM_QUERYLIMITS,(MPARAM)ulUpLimit,(MPARAM)ulLoLimit); }
  144.  
  145.     BOOL queryValue(PVOID buf,USHORT size,USHORT value=SPBQ_UPDATEIFVALID) {
  146.         return (BOOL) sendMsg(SPBM_QUERYVALUE,(MPARAM)buf,MPFROM2SHORT(size,value)); }
  147.  
  148.     BOOL setArray(PCHAR *array,USHORT size) {
  149.         return (BOOL) sendMsg(SPBM_SETARRAY,(MPARAM)array,(MPARAM)size); }
  150.  
  151.     BOOL setCurrentValue(LONG value) {
  152.         return (BOOL) sendMsg(SPBM_SETCURRENTVALUE,(MPARAM)value); }
  153.  
  154.     BOOL setLimits(ULONG ulUpLimit,ULONG ulLoLimit) {
  155.         return (BOOL) sendMsg(SPBM_SETLIMITS,(MPARAM)ulUpLimit,(MPARAM)ulLoLimit); }
  156.  
  157.     BOOL setMaster(HWND master) {
  158.         return (BOOL) sendMsg(SPBM_SETMASTER,(MPARAM)master); }
  159.     
  160.     BOOL setTextLimit(USHORT usCharLimit) {
  161.         return (BOOL) sendMsg(SPBM_SETTEXTLIMIT,(MPARAM)usCharLimit); }
  162.  
  163.     BOOL spinDown(ULONG ulItems=1) {
  164.         return (BOOL) sendMsg(SPBM_SPINDOWN,(MPARAM)ulItems); }
  165.  
  166.     BOOL spinUp(ULONG ulItems=1) {
  167.         return (BOOL) sendMsg(SPBM_SPINUP,(MPARAM)ulItems); }
  168.  
  169.     void get();
  170.     void set();
  171. };
  172.  
  173. /////////////////////////////////////////////////////////////////////////////
  174.  
  175. class PMListBox : public PMControl {
  176. protected:
  177. public:
  178.     PMListBox(HWND parentDlg,void* iobj,int ilen,int iid);
  179.     ~PMListBox();
  180.     static PMControl* New(HWND parent,void* obj, int len , int id)
  181.         { return new PMListBox(parent,obj,len,id); }
  182.     void get();
  183.     void set();
  184.     ULONG deleteItem(SHORT index) {
  185.         return (ULONG)WinSendMsg(hwnd,LM_DELETEITEM,MPFROMLONG(index),(MPARAM)NULL);
  186.     }
  187.     BOOL deleteAll() {
  188.         return (BOOL)WinSendMsg(hwnd,LM_DELETEALL,(MPARAM)NULL,(MPARAM)NULL);
  189.     }
  190.     ULONG insertItem(SHORT index,PSZ item) {
  191.         return (ULONG)WinSendMsg(hwnd,LM_INSERTITEM,MPFROMLONG(index),MPFROMP(item));
  192.     }
  193.     ULONG queryCount() {
  194.         return (ULONG)WinSendMsg(hwnd,LM_QUERYITEMCOUNT,(MPARAM)NULL,(MPARAM)NULL);
  195.     }
  196.     ULONG querySelection() {
  197.         return (ULONG)WinSendMsg(hwnd,LM_QUERYSELECTION,MPFROMLONG(LIT_FIRST),(MPARAM)NULL);
  198.     }
  199.     ULONG queryItemText(SHORT index,PSZ buf,SHORT cchMax) {
  200.         return (ULONG)WinSendMsg(hwnd,LM_QUERYITEMTEXT,MPFROM2SHORT((index), (cchMax)), MPFROMP (buf));
  201.     }
  202.     ULONG queryItemTextLenght(SHORT index) {
  203.         return (ULONG)WinSendMsg(hwnd,LM_QUERYITEMTEXTLENGTH,MPFROMLONG(index),(MPARAM)NULL);
  204.     }
  205. };
  206.  
  207. /////////////////////////////////////////////////////////////////////////////
  208.  
  209. class PMScrollBar : public PMControl {
  210. protected:
  211. public:
  212.     PMScrollBar(HWND parentDlg, void* iobj, int ilen, int iid);
  213.     PMScrollBar(PMWin* win, int* iobj, int iid);
  214.     static PMControl* New(HWND parent,void* obj, int len, int id) 
  215.         { return new PMScrollBar(parent,obj,len,id); }
  216.     void get();
  217.     void set();
  218.     SHORT queryPos() {
  219.         return (SHORT)WinSendMsg(hwnd,SBM_QUERYPOS,(MPARAM)NULL,(MPARAM)NULL);
  220.     }
  221.     SHORT queryRangeMin() {
  222.         return SHORT1FROMMR(WinSendMsg(hwnd,SBM_QUERYRANGE,(MPARAM)NULL,(MPARAM)NULL));
  223.     }
  224.     SHORT queryRangeMax() {
  225.         return SHORT2FROMMR(WinSendMsg(hwnd,SBM_QUERYRANGE,(MPARAM)NULL,(MPARAM)NULL));
  226.     }
  227.     BOOL setPos(SHORT sslider) {
  228.         return (BOOL)WinSendMsg(hwnd,SBM_SETPOS,(MPARAM)sslider,(MPARAM)NULL);
  229.     }
  230.     BOOL setScrollBar(SHORT sslider,SHORT sfirst, SHORT slast) {
  231.         return (BOOL)WinSendMsg(hwnd,SBM_SETSCROLLBAR,(MPARAM)sslider,MPFROM2SHORT(sfirst,slast));
  232.     }
  233.     BOOL setThumbSize(SHORT svisible,SHORT stotal) {
  234.         return (BOOL)WinSendMsg(hwnd,SBM_SETTHUMBSIZE,MPFROM2SHORT(svisible,stotal),(MPARAM)NULL);
  235.     }
  236. };
  237.  
  238. class PMVertScrollBar : public PMScrollBar {
  239. public:
  240.     PMVertScrollBar(PMWin* win, int* iobj);
  241. };
  242.  
  243. class PMHorizScrollBar : public PMScrollBar {
  244. public:
  245.     PMHorizScrollBar(PMWin* win, int* iobj);
  246. };
  247.  
  248. /////////////////////////////////////////////////////////////////////////////
  249.  
  250. #ifndef offsetof
  251. #define offsetof(typ,mbr) ((size_t)((char*)&((typ*)0)->(mbr)-(char*)0))
  252. #endif
  253.  
  254. struct PMControlMap {
  255.     NEWCTRLFN createfn;
  256.     int id;
  257.     int offset;
  258.     int len;        
  259.     PMControl* ctrl;
  260. };
  261.  
  262. // macros to fill out the dialog control structure
  263.  
  264. #define cmCust(fn, id, typ, mbr) \
  265.     { fn,id,offsetof(typ,mbr),sizeof(((typ *)0)->mbr), NULL },
  266.     
  267. #define cmEntryField(id,typ,mbr) cmCust(PMEntryField::New,id,typ,mbr)
  268. #define cmListBox(id,typ,mbr) cmCust(PMListBox::New,id,typ,mbr)
  269. #define cmButton(id) { PMButton::New, id, 0, 0, NULL }
  270. #define cmRadioButtonGroup(id,typ,mbr) cmCust(PMRadioButtonGroup::New,id,typ,mbr)
  271. #define cmCheckBox(id,typ,mbr) cmCust(PMCheckBox::New,id,typ,mbr)
  272. #define cmValueSet(id,typ,mbr) cmCust(PMValueSet::New,id,typ,mbr)
  273. #define cmSpinButton(id,typ,mbr) cmCust(PMSpinButton::New,id,typ,mbr)
  274. #define cmMultiLineEdit(id,typ,mbr) cmCust(PMMultiLineEdit::New,id,typ,mbr)
  275. #define cmEnd(id) { NULL, id, 0, 0, NULL }
  276.  
  277. class PMDialog : public PMWin {
  278. protected:
  279.     BOOL dispachEvent(PMEvent & event);
  280. public:
  281.     PMDialog(HWND parent,HWND owner);
  282.     ~PMDialog();
  283.     virtual void init();
  284.     BOOL createWin();    
  285.     BOOL destroyWin();    
  286.  
  287.     virtual BOOL initdlg();
  288.     virtual BOOL control(SHORT id,SHORT ctrlmsg);    
  289.     BOOL command(USHORT id,USHORT cmddev);     // command ridefinito...
  290. };
  291.  
  292. class PMModalDialog : public PMDialog {
  293. protected:
  294.     int delctlmap; // TRUE if the ctlmap is deleteable
  295.     ULONG id;
  296.     void* obj;
  297.     PMControlMap* cm;
  298. public:
  299.     PMModalDialog(HWND parent,HWND owner,ULONG id,PMControlMap* cm,void* obj);
  300.     ~PMModalDialog();
  301.     void init();
  302.     BOOL createWin();    
  303.     void updateControls();
  304.     void updateObject();
  305.     PMControl* controlFromID(int id); 
  306.     BOOL command(USHORT id,USHORT cmddev);     // command ridefinito...
  307. };
  308.  
  309.  
  310. class PMModelessDialog : public PMModalDialog {
  311. public:
  312.     PMModelessDialog(HWND parent,HWND owner,ULONG id,PMControlMap* cm,void* obj) :
  313.         PMModalDialog(parent,owner,id,cm,obj) { };
  314.     BOOL createWin();    
  315. };
  316.  
  317. /////////////////////////////////////////////////////////////////////////////
  318.  
  319. class PMFontDialog : public PMDialog {
  320. protected:
  321.     FONTMETRICS *fm;
  322.     FONTDLG fontdlg;
  323.     friend MRESULT PMFontDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  324. public:
  325.     PMFontDialog(HWND parent,HWND owner,FONTMETRICS *ifm,ULONG type,PSZ ititle,PSZ ipreview);
  326.     ~PMFontDialog();
  327.     operator FONTDLG () { return fontdlg; } // cosi' si puo' accedere ai dati privati
  328.     BOOL createWin();    
  329. };
  330.  
  331. /////////////////////////////////////////////////////////////////////////////
  332.  
  333. class PMFileDialog : public PMDialog {
  334. protected:
  335.     FILEDLG filedlg;
  336.     friend MRESULT PMFileDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  337. public:
  338.     PMFileDialog(HWND parent,HWND owner,PSZ file,PSZ ititle,PSZ OKButton,ULONG flags);
  339.     ~PMFileDialog();
  340.     operator FILEDLG () { return filedlg; } // cosi' si puo' accedere ai dati privati
  341.     BOOL createWin();    
  342. };
  343.  
  344.  
  345. #endif
  346.  
  347.